package com.gylang.commons.util;


import com.gylang.commons.vo.GResultVO;

/**
 * @author gylang,
 * date 2020/4/14,
 * @version 1.0
 * 统一返回处理
 */
public class GResultUtils {

    public final static String DEF_SUCCESS_RESPONSE_CODE = "200";
    public final static String DEF_SUCCESS_RESPONSE_MSG = "成功";

    public final static String DEF_FAIL_RESPONSE_CODE = "-1";
    public final static String DEF_FAIL_RESPONSE_MSG = "失败";

    /**
     * 默认code 200 msg 成功
     *
     * @param data 设置数据
     * @param <T>  数据类型
     * @return 成功结果
     */
    public static <T> GResultVO<T> setData(T data) {


        GResultVO<T> result = new GResultVO<>();

        result.setData(data);
        result.setCode(DEF_SUCCESS_RESPONSE_CODE);
        result.setMsg(DEF_SUCCESS_RESPONSE_MSG);
        return result;

    }

    /**
     * 默认code 200 msg 成功
     *
     * @param data 设置数据
     * @param <T>  数据类型
     * @return 成功结果
     */
    public static <T> GResultVO<T> setSuccess(String msg, T data) {


        GResultVO<T> GResultVO = setData(data);
        GResultVO.setMsg(msg);
        return GResultVO;
    }

    /**
     * 默认返回 code : -1 msg : 失败 data : null
     *
     * @return 失败结果
     */
    public static GResultVO<String> setFail() {

        GResultVO<String> result = new GResultVO<>();
        result.setCode(DEF_FAIL_RESPONSE_CODE);
        result.setMsg(DEF_FAIL_RESPONSE_MSG);
        return result;
    }

    /**
     * 失败返回
     *
     * @param code 失败code
     * @param msg  失败信息
     * @return 失败信息对象
     */
    public static GResultVO<Object> setFail(String code, String msg) {

        GResultVO<Object> GResultVO = new GResultVO<>();
        GResultVO.setCode(code);
        GResultVO.setMsg(msg);
        return GResultVO;
    }

    /**
     * 默认返回msg : 失败  data : null
     *
     * @param code 失败code
     * @return 失败信息
     */
    public static GResultVO setFailCode(String code) {

        GResultVO GResultVO = setFail();
        GResultVO.setCode(code);
        return GResultVO;
    }

    /**
     * 默认返回code : -1  data : null
     *
     * @param msg 失败信息
     * @return 失败信息
     */
    public static GResultVO<String> setFailMsg(String msg) {

        GResultVO<String> result = setFail();
        result.setMsg(msg);
        return result;
    }

    /**
     * 默认返回code : -1  data : null
     *
     * @return 失败信息
     */
    public static <T> GResultVO<T> verify2Result(Boolean success, String failCode, String failMsg, T data) {

        GResultVO<T> result = new GResultVO<T>();
        result.setCode(Boolean.TRUE.equals(success) ? "200" : (null != failCode ? failCode : "-1"));
        result.setMsg(Boolean.TRUE.equals(success) ? "成功" : (null != failMsg ? failMsg : "失败"));
        result.setData(data);
        return result;
    }

    /**
     * 默认返回code : -1  data : null
     *
     * @return 失败信息
     */
    public static <T> GResultVO<T> verify2Result(Boolean success, String failMsg, T data) {

        return verify2Result(success, null, failMsg, data);
    }
    /**
     * 默认返回code : -1  data : null
     *
     * @return 失败信息
     */
    public static <T> GResultVO<T> verify2Result(Boolean success, String failMsg) {

        return verify2Result(success, null, failMsg, null);
    }

    /**
     * 默认返回code : -1  data : null
     *
     * @return 失败信息
     */
    public static <T> GResultVO<T> verify2Result(Boolean success, T data) {

        return verify2Result(success, null, data);
    }

    /**
     * 默认返回code : -1  data : null
     *
     * @return 失败信息
     */
    public static <T> GResultVO<T> verify2Result(Boolean success) {

        return verify2Result(success, null);
    }


}
